package com.chunfeng.lerunapplication.dialog;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.chunfeng.lerunapplication.R;
import com.chunfeng.lerunapplication.entity.User;

import java.util.Objects;

/**
 * 修改用户弹窗
 *
 * @author by 春风能解释
 * <p>
 * 2023/12/5
 */
public class UpdateUserDialog extends Dialog implements View.OnClickListener {
    /**
     * 标题
     */
    private TextView title;
    /**
     * 用户名
     */
    private EditText username;
    /**
     * 手机号
     */
    private EditText phone;
    /**
     * 提交
     */
    private Button submit;
    /**
     * 取消
     */
    private Button cancel;
    /**
     * 提交事件
     */
    private SubmitButtonOnClickListener submitButtonOnClickListener;
    /**
     * 取消事件
     */
    private CancelButtonOnClickListener cancelButtonOnClickListener;
    /**
     * 标题
     */
    private String titleStr;
    /**
     * 用户名
     */
    private String usernameStr;
    /**
     * 手机号
     */
    private String phoneStr;
    /**
     * 更新用户名校验
     */
    private TextView updateNameMessage;
    /**
     * 更新手机号校验
     */
    private TextView updatePhoneMessage;


    /**
     * 初始化带参构造
     *
     * @param context 应用上下文
     */
    public UpdateUserDialog(@NonNull Context context) {
        super(context);
    }

    /**
     * 设置提交事件
     *
     * @param submitButtonOnClickListener 提交事件
     * @return 当前对象
     */
    public UpdateUserDialog setSubmitButtonOnClickListener(SubmitButtonOnClickListener submitButtonOnClickListener) {
        this.submitButtonOnClickListener = submitButtonOnClickListener;
        return this;
    }

    /**
     * 设置取消事件
     *
     * @param cancelButtonOnClickListener 取消事件
     * @return 当前对象
     */
    public UpdateUserDialog setCancelButtonOnClickListener(CancelButtonOnClickListener cancelButtonOnClickListener) {
        this.cancelButtonOnClickListener = cancelButtonOnClickListener;
        return this;
    }

    /**
     * 设置标题
     *
     * @param titleStr 标题
     * @return 当前对象
     */
    public UpdateUserDialog setTitle(String titleStr) {
        this.titleStr = titleStr;
        return this;
    }

    /**
     * 设置用户名
     *
     * @param usernameStr 用户名
     * @return 当前对象
     */
    public UpdateUserDialog setUsername(String usernameStr) {
        this.usernameStr = usernameStr;
        return this;
    }

    /**
     * 设置手机号
     *
     * @param phoneStr 手机号
     * @return 当前对象
     */
    public UpdateUserDialog setPhone(String phoneStr) {
        this.phoneStr = phoneStr;
        return this;
    }

    /**
     * 显示逻辑
     */
    @Override
    public void show() {
        super.show();
    }

    /**
     * 关闭逻辑
     */
    @Override
    public void dismiss() {
        super.dismiss();
    }


    /**
     * 创建时触发
     *
     * @param savedInstanceState 状态
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_user_dialog);
        initView();
        initData();
    }

    /**
     * 初始化布局s
     */
    private void initView() {
        title = findViewById(R.id.Update_Title);
        username = findViewById(R.id.EditText_UpdateName);
        phone = findViewById(R.id.EditText_UpdatePhone);
        submit = findViewById(R.id.Update_Submit);
        cancel = findViewById(R.id.Update_Cancel);
        updateNameMessage = findViewById(R.id.UpdateName_Message);
        updatePhoneMessage = findViewById(R.id.UpdatePhone_Message);
        submit.setOnClickListener(this);
        cancel.setOnClickListener(this);
    }

    /**
     * 初始化数据
     */
    private void initData() {
        title.setText(titleStr);
        username.setText(usernameStr);
        phone.setText(phoneStr);
    }

    /**
     * 获取当前输入的数据
     *
     * @param id ID
     * @return 最新的用户数据
     */
    public User getCurrentUser(Integer id) {
        String name = username.getText().toString();
        String phone = this.phone.getText().toString();
        updateNameMessage.setVisibility(name.isEmpty() ? View.VISIBLE : View.INVISIBLE);
        updatePhoneMessage.setVisibility(phone.isEmpty() ? View.VISIBLE : View.INVISIBLE);
        if (name.isEmpty() || phone.isEmpty()) {
            return null;
        }
        return new User(id, name, phone);
    }

    /**
     * 点击事件
     *
     * @param v 已点击的元素
     */
    @Override
    public void onClick(View v) {
        int id = v.getId();
        //确定按钮点击
        if (id == R.id.Update_Submit && Objects.nonNull(submitButtonOnClickListener)) {
            submitButtonOnClickListener.setSubmitButtonOnClickListener(this);
        }
        //取消按钮点击
        if (id == R.id.Update_Cancel && Objects.nonNull(cancelButtonOnClickListener)) {
            cancelButtonOnClickListener.setCancelButtonOnClickListener(this);
        }
    }


    /**
     * 提交按钮事件接口
     */
    public interface SubmitButtonOnClickListener {
        /**
         * 提交按钮点击定义
         *
         * @param dialog 弹窗对象
         */
        void setSubmitButtonOnClickListener(UpdateUserDialog dialog);
    }

    /**
     * 取消按钮事件接口
     */
    public interface CancelButtonOnClickListener {
        /**
         * 取消按钮事件定义
         *
         * @param dialog 弹窗
         */
        void setCancelButtonOnClickListener(UpdateUserDialog dialog);
    }
}
